﻿using BrightIdeasSoftware;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1.Test
{
    public partial class Form1 : Form
    {
        private FastObjectListView folv;
        private ImageList imageList; // 存储图标
        public Form1()
        {
            InitializeComponent1();
            InitializeImageList();
            InitializeListView();
            LoadData();
        }

        private void InitializeComponent1()
        {
            this.SuspendLayout();
            this.ClientSize = new Size(800, 450);
            this.Name = "MainForm";
            this.Text = "FastObjectListView 图标按钮示例";
            this.ResumeLayout(false);
        }

        // 初始化图标集合
        private void InitializeImageList()
        {
            imageList = new ImageList();
            imageList.ImageSize = new Size(16, 16); // 图标大小

            // 添加示例图标（实际使用时替换为你的图标）
            // 可以从资源文件加载或使用系统图标
            imageList.Images.Add("edit", SystemIcons.Warning);    // 编辑图标
            imageList.Images.Add("delete", SystemIcons.Question);// 删除图标
            imageList.Images.Add("ok", SystemIcons.Asterisk);               // 状态图标-正常
            imageList.Images.Add("warning", SystemIcons.Warning);           // 状态图标-警告
        }

        // 初始化FastObjectListView
        private void InitializeListView()
        {
            folv = new FastObjectListView
            {
                Dock = DockStyle.Fill,
                View = View.Details,
                FullRowSelect = true,
                GridLines = true,
                SmallImageList = imageList, // 关联图标集合
                OwnerDraw = true // 启用自绘（如需自定义按钮样式）
            };

            // 添加名称列
            var nameColumn = new OLVColumn("名称", "Name") { Width = 200 };
            folv.Columns.Add(nameColumn);

            // 添加状态列（带状态图标）
            var statusColumn = new OLVColumn("状态", "Status") { Width = 150 };
            // 设置状态图标
            statusColumn.ImageGetter = (model) =>
            {
                var item = model as Item;
                return item.Status == "正常" ? "ok" : "warning";
            };
            folv.Columns.Add(statusColumn);

            // 添加操作列（带编辑/删除按钮）
            var actionColumn = new OLVColumn("操作", "") { Width = 120 };
            // 设置操作图标
            actionColumn.ImageGetter = (model) =>
            {
                var item = model as Item;
                return item.HasAction ? "edit" : null; // 根据条件显示不同图标
            };
            // 允许操作列显示多个图标（通过分隔符）
            //actionColumn.MultiImageSeparator = ';';
            folv.Columns.Add(actionColumn);

            // 订阅单元格点击事件（处理图标点击）
            folv.CellClick += Folv_CellClick;

            // 添加到窗体
            this.Controls.Add(folv);
        }

        // 加载示例数据
        private void LoadData()
        {
            var data = new List<Item>
            {
                new Item { Name = "文档1", Status = "正常", HasAction = true },
                new Item { Name = "文档2", Status = "警告", HasAction = true },
                new Item { Name = "文档3", Status = "正常", HasAction = false },
                new Item { Name = "文档4", Status = "警告", HasAction = true }
            };
            folv.SetObjects(data);
        }

        // 处理单元格点击事件（判断是否点击了图标）
        private void Folv_CellClick(object sender, CellClickEventArgs e)
        {
            // 只处理操作列（索引2）
            if (e.ColumnIndex != 2) return;

            var item = folv.GetModelObject(e.RowIndex) as Item;
            if (item == null) return;

            // 获取图标在单元格中的位置
            var column = folv.Columns[e.ColumnIndex];
            var iconRect = GetIconRectangle(e.RowIndex, e.ColumnIndex);

            // 判断点击位置是否在图标区域内
            if (iconRect.Contains(e.Location))
            {
                // 执行对应操作
                MessageBox.Show($"点击了 {item.Name} 的编辑按钮");
                // 这里可以添加编辑逻辑
            }
        }

        // 计算图标在单元格中的位置
        private Rectangle GetIconRectangle(int rowIndex, int columnIndex)
        {
            var item = folv.GetItem(rowIndex);
            var subItem = item.SubItems[columnIndex];
            var cellRect = new Rectangle(0, 0, 100, 100); //folv.Bounds(rowIndex, columnIndex);

            // 计算图标位置（居中显示）
            int x = cellRect.X + (cellRect.Width - imageList.ImageSize.Width) / 2;
            int y = cellRect.Y + (cellRect.Height - imageList.ImageSize.Height) / 2;

            return new Rectangle(x, y, imageList.ImageSize.Width, imageList.ImageSize.Height);
        }
    }

    // 数据模型类
    public class Item
    {
        public string Name { get; set; }
        public string Status { get; set; }
        public bool HasAction { get; set; } // 是否显示操作按钮
    }
}
